package com.yvtian.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yvtian.admin.dto.ReqRole;
import com.yvtian.admin.pojo.SysRole;
import com.yvtian.admin.vo.RoleVO;
import com.yvtian.admin.vo.UserVO;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public interface SysRoleService extends IService<SysRole> {

    SysRole findRoleByRoleId(Integer roleId);

    void addRole(ReqRole reqRole);

    void delRole(ArrayList<Integer> ids);

    void updateRole(Integer roleId, ArrayList<Integer> menuIds, Map<String, Object> columnData);

    IPage<SysRole> findByPage(Page<SysRole> page, RoleVO roleVO);

    /**
     * 修改角色状态
     * @param disable 状态
     * @param roleId 角色Id
     */
    void changeDisable(String disable, Integer roleId);

    /**
     * 批量查询角色信息
     * @param roleIds 角色Id的集合
     */
    List<RoleVO> findBatchByRoleIds(ArrayList<Integer> roleIds);


    /**
     *  赋予用户角色
     * @param roleIds 角色Id集合
     * @param userId 用户Id
     */
    void updateRoleToUser(ArrayList<Integer> roleIds, String userId);

    /**
     * 查询拥有该角色的用户
     * @param roleId 角色Id
     */
    UserVO findUserByRole(Integer roleId, Integer pageNum, Integer pageSize, String nickname, String mobile);

    /**
     * 删除该用户的角色
     * @param userIds 用户Id集合
     * @param roleId 角色Id
     */
    void delUserRoleByUserIds(Integer roleId, ArrayList<String> userIds);

    /**
     * 查询不拥有该角色的用户
     * @param roleId
     * @return
     */
    UserVO findUserNotInRole(Integer roleId, Integer pageNum, Integer pageSize, String nickName, String mobile);

    /**
     * 给用户添加角色
     * @param roleId 角色Id
     * @param userIds 用户Id集合
     */
    void addRoleToUser(Integer roleId, ArrayList<String> userIds);

    /**
     * 获取角色excel的数据
     */
    List<List<String>> export();
}
